#!/usr/bin/env python

import subprocess
from subprocess import PIPE
import shlex
import tarfile
						 
def get_package_from_url(package_name):
	"""
	piccola funzione per ottenere il nome del pacchetto
	avendo a disposizione l'url.
	
	@package_name e' il nome del pacchetto che si vuole
	estrapolare dall'url.
	
	la funzione ritorna il nome del pacchetto senza url
	"""
	tuple_r = package_name.rpartition('/')[-1]
	return tuple_r
	
def get_name_without_ext(package_name):
	"""
	piccola funzione per ottenere il nome del pacchetto
	senza estensione.
	
	@package_name e' il nome del pacchetto
	
	la funzione ritorna il nome del pacchetto senza estensione
	"""
	return package_name.partition('.')[0]

def catch_error(command):
	"""
	catch_error esegue il comando passatogli come argomento e 
	controlla eventuali errori di esecuzione e li stampa a schermo.
	Utilizza il metodo subprocess e divide il comando in una lista
	di argomenti utilizzando shlex.
	
	@command e' il comando che si vuole eseguire.
	
	la funzione ritorna:
	    True in caso non ci siano errori durante l'esecuzione
	    False in caso di errori dirante l'esecuzione
	"""
	command = shlex.split(command)
	cmd = subprocess.Popen(command, stdout=PIPE, stderr=PIPE, shell=True)
	if cmd.stderr.read() != '':
		print cmd.stderr.read()
		return False
	return True

def extract_tar(package_name):
	"""
	Semplice funzione che utilizza la libreria TarFile
	per estrarre il pacchetto.
	
	@package_name e' il nome del pacchetto
	
	la funzione ritorna:
		True se l'operazione e' andata a buon fine
		False se c'e' stato un errore
	"""
	try:
		tarf = tarfile.open(package_name)
	except:
		print "errore: impossibile aprire \"%s\". Assicurati che sia nella directory corrente e riprova." % package_name
	if tarfile.is_tarfile(package_name):
		try:
			tarf.extractall()
			return True
		except:
			print "errore: impossibile estrarre \"%s\". Assicurati di avere i permessi sufficienti nella directory corrente, quindi riprova." % package_name
			return False
	else:
		print "errore: sembra che \"%s\" non sia un archivio valido. Impossibile continuare." % package_name
		return False
